<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<title>1_类的基本知识</title>
</head>

<body>
	<script type="text/javascript">
		/*
			总结：
				1.类中的构造器不是必须要写的，要对实例进行一些初始化的操作，如添加指定属性时才写。
				2.如果A类继承了B类，且A类中写了构造器，那么A类构造器中的super是必须要调用的。
				3.类中所定义的方法，都放在了类的原型对象上，供实例去使用。
		*/

		// 创建一个Person类
		class Person {
			// 构造器方法,this指向类生成的实例对象 
			constructor(name, age) {
				this.name = name
				this.age = age
			}
			// 一般方法,放到了类的原型对象上,提供给实例使用
			// 通过Person实例调用speak时,speak中的this就是Person实例
			speak() {
				console.log(`我的姓名是${this.name},年龄${this.age}`);
			}
		}

		// 创建一个Student类继承Person类
		class Student extends Person {
			constructor(name, age, grade) {
				super(name, age)
				this.grade = grade
				this.school = '尚硅谷'
			}
			// 重写父类的方法
			speak() {
				console.log(`我的姓名是${this.name},年龄${this.age},今年${this.grade}`);
			}
			study() {
				console.log('我爱学习');
			}
		}

		class car {
			constructor(name, price) {
				this.name = name
				this.price = price
				//1.通过构造器给类的实例添加属性
				this.wheels = 44
			}

			// 2.下面这种写法是给类添加属性a,值为666
			static a = 666

			// 2.类中直接写赋值语句,给car的实例对象添加属性为wheel,值为4	
			wheel = 4

			// 这个方法放到了类的原型上
			run() { }
			// 赋值语句+箭头函数(放在实例自身了)
			run = () => {}
		}
		//1.给类添加属性demo,值为100
		car.demo = 100
		
		const c1 = new car('奔驰', 199)
		const c2 = new car('宝马', 299)
		console.log(c1);
		console.log(c2);
		console.log(car.demo);
		console.log(car.a);
	</script>
</body>

</html>